import { SyncWaterfallHook } from "tapable";

// 初始化同步钩子
const hook = new SyncWaterfallHook<[string, string, string]>([
  "arg1",
  "arg2",
  "arg3",
]);

// 注册事件
hook.tap("flag1", (arg1, arg2, arg3) => {
  console.log("flag1:", arg1, arg2, arg3);
  // 存在返回值 修改flag2函数的实参
  return "flag1:19Qingfeng";
});

hook.tap("flag2", (arg1, arg2, arg3) => {
  console.log("flag2:", arg1, arg2, arg3);
  return "flag2:wang";
});

hook.tap("flag3", (arg1, arg2, arg3) => {
  console.log("flag3:", arg1, arg2, arg3);
  return "flag3:haoyu";
});

// 调用事件并传递执行参数
hook.call("19Qingfeng", "wang", "haoyu");
// 输出结果
// flag1: 19Qingfeng wang haoyu
// flag2: github wang haoyu
// flag3: github wang haoyu
// 需要额外注意的是当存在多个参数时，通过 SyncWaterfallHook 仅能修改第一个参数的返回值。
